package com.hmp.recruit.common.vo;

import java.util.Collections;
import java.util.List;

/**
 * 分页实体
 * 
 * @auth ex-hejm
 * @date 2018年11月21日 上午11:19:15
 */
public class Page<T> {
	private Integer code = 0;  // layui分页，正确状态码
	private String msg;
	/**
	 * 默认第一页页码
	 */
	public static final int FIRST_PAGE = 1;// 第一页，从1开始
	/**
	 * 默认每页记录数
	 */
	public static final int PAGE_SIZE = 50;// 默认一页记录数

	/**
	 * 从第一条记录开始查询
	 */
	public static final int START = 0;

	/**
	 * 查询所有记录
	 */
	public static final int ALL = -1;

	private List<T> data = Collections.emptyList();// 当前页记录
	private int pageNo = FIRST_PAGE;// 当前页码
	private int pageSize = PAGE_SIZE;// 每页记录数
	private int count = 0;// 记录总条数

	public static <T> Page<T> empty() {
		Page<T> page = new Page<T>();
		return page;
	}

	public static <T> Page<T> create(List<T> items, int total) {
		Page<T> page = new Page<T>();
		page.setData(items);
		page.setCount(total);
		return page;
	}

	public static <T> Page<T> create(List<T> items, int start, int limit, int total) {
		Page<T> page = new Page<T>();
		page.setData(items);
		page.setPageNo(FIRST_PAGE + start / limit);
		page.setPageSize(limit);
		page.setCount(total);
		return page;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	/**
	 * 获取共有多少页
	 * 
	 * @return
	 */
	public int getPageCount() {
		int pageCount = this.count / this.pageSize;
		if (this.count % this.pageSize > 0) {
			pageCount++;
		}
		return pageCount;
	}

	/**
	 * 获取第一页页码
	 * 
	 * @return
	 */
	public int getFirstPageNo() {
		return FIRST_PAGE;
	}

	/**
	 * 获取最后一页页码
	 * 
	 * @return
	 */
	public int getLastPageNo() {
		return this.getPageCount() + FIRST_PAGE - 1;
	}

	/**
	 * 获取当前页记录条数
	 * 
	 * @return
	 */
	public int getDataSize() {
		return this.data.size();
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public List<T> getData() {
		return data;
	}

	public void setData(List<T> data) {
		this.data = data;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

}
